package jmine.tec.batch.actor;

import jmine.tec.batch.BatchController;
import jmine.tec.batch.event.domain.Event;
import jmine.tec.batch.event.domain.enumx.EventActionModeEnum;
import jmine.tec.batch.event.domain.enumx.EventLevelEnum;
import bancosys.tec.component.actor.AbstractActor;

/**
 * Actor abstrato de tratamento de eventos.
 * 
 * @author Fernando Chovich
 * @date 18/04/2008
 */
public abstract class EventAwareActor extends AbstractActor {

    /**
     * Método abstrato que retorna o controller do componente de batch.
     * 
     * @return controller do kernel.
     */
    public abstract BatchController getBatchController();

    /**
     * Cria um evento vazio.
     * 
     * @return evento vazio.
     */
    public Event createEmptyEvent() {
        return new Event();
    }

    /**
     * Lança evento.
     * 
     * @param level - nível do evento.
     * @param actionMode - modo de ação do evento.
     * @param descr - descrição do evento.
     */
    public void throwEvent(EventLevelEnum level, EventActionModeEnum actionMode, String descr) {
        Event event = this.createEmptyEvent();
        event.setActionMode(actionMode);
        event.setLevel(level);
        event.setDescr(descr);

        this.getBatchController().throwEvent(event);
    }

    /**
     * Lança evento de debug.
     * 
     * @param descr - descrição do evento.
     */
    public void throwDebugEvent(String descr) {
        this.throwEvent(EventLevelEnum.DEBUG, EventActionModeEnum.DISPATCH, descr);
    }

    /**
     * Lança evento de info.
     * 
     * @param descr - descrição do evento.
     */
    public void throwInfoEvent(String descr) {
        this.throwEvent(EventLevelEnum.INFO, EventActionModeEnum.DISPATCH, descr);
    }

    /**
     * Lança evento do warn.
     * 
     * @param descr - descrição do evento.
     */
    public void throwWarnEvent(String descr) {
        this.throwEvent(EventLevelEnum.WARN, EventActionModeEnum.DISPATCH, descr);
    }

    /**
     * Lança evento do warn.
     * 
     * @param descr - descrição do evento.
     */
    public void throwErrorEvent(String descr) {
        this.throwEvent(EventLevelEnum.ERROR, EventActionModeEnum.DISPATCH, descr);
    }

}
